package com.kent.hellokotlin.cClassAndObject

//定义接口
interface MyInterface {
    fun bar()
    fun foo() {}

}

//实现接口
class Chile : MyInterface {
    override fun bar() {
    }
}

//接口中的属性
//你可以在接口中定义属性。在接口中声明的属性要么是抽象的，要么提供访问器的实现。
//在接口中声明的属性不能有幕后字段（backing field），因此接口中声明的访问器不能引用它们
interface MyInterface1 {
    val prop: Int
    var propWithImpl: String
        get() = "foo"
        set(value) {

        }

    fun foo() {
        println(prop)
    }
}

class Child1 : MyInterface1 {
    override val prop: Int = 6
}

//接口继承
interface Named {
    val name: String
}

interface Person4 : Named {
    val firstName: String
    val lastName: String
    override val name: String get() = firstName + lastName
}

data class Employee(
    override val firstName: String,
    override val lastName: String,
    val position: String
) : Person4

//解决覆盖冲突
//实现多个接口时，可能会遇到同一方法继承多个实现的问题。例如
interface A {
    fun foo() { print("A") }
    fun bar()
}

interface B {
    fun foo() { print("B") }
    fun bar() { print("bar") }
}

class C : A {
    override fun bar() { print("bar") }
}

class D : A, B {
    override fun foo() {
        super<A>.foo()
        super<B>.foo()
    }

    override fun bar() {
        super.bar()
    }
}